import Mock from 'mockjs';
import setupMock, {failResponseWrap, successResponseWrap,} from '@/utils/setup-mock';

import {MockParams} from '@/types/mock';
import {isLogin} from '@/utils/auth';

setupMock({
    setup() {
        // Mock.XHR.prototype.withCredentials = true;

        // 用户信息
        Mock.mock(new RegExp('/api/user/info'), () => {
            if (isLogin()) {
                const role = window.localStorage.getItem('userRole') || 'admin';
                return successResponseWrap({
                    name: '王立群',
                    avatar:
                        '//lf1-xgcdn-tos.pstatp.com/obj/vcloud/vadmin/start.8e0e4855ee346a46ccff8ff3e24db27b.png',
                    email: 'wangliqun@email.com',
                    job: 'frontend',
                    jobName: '前端艺术家',
                    organization: 'Frontend',
                    organizationName: '前端',
                    location: 'beijing',
                    locationName: '北京',
                    introduction: '人潇洒，性温存',
                    personalWebsite: 'https://www.arco.design',
                    phone: '150****0000',
                    registrationDate: '2013-05-10 12:10:00',
                    accountId: '15012312300',
                    certification: 1,
                    role,
                });
            }
            return failResponseWrap(null, '未登录', 50008);
        });

        // 登录
        Mock.mock(new RegExp('/api/user/login'), (params: MockParams) => {
            const {username, password} = JSON.parse(params.body);
            if (!username) {
                return failResponseWrap(null, '用户名不能为空', 50000);
            }
            if (!password) {
                return failResponseWrap(null, '密码不能为空', 50000);
            }
            if (username === 'admin' && password === 'admin') {
                window.localStorage.setItem('userRole', 'admin');
                return successResponseWrap({
                    token: '12345',
                });
            }
            if (username === 'user' && password === 'user') {
                window.localStorage.setItem('userRole', 'user');
                return successResponseWrap({
                    token: '54321',
                });
            }
            return failResponseWrap(null, '账号或者密码错误', 50000);
        });

        // 登出
        Mock.mock(new RegExp('/api/user/logout'), () => {
            return successResponseWrap(null);
        });

        // 用户的服务端菜单
        Mock.mock(new RegExp('/api/user/menu'), () => {
            const menuList = [
                {
                    path: '/dashboard',
                    name: 'dashboard',
                    meta: {
                        locale: 'menu.server.dashboard',
                        requiresAuth: true,
                        icon: 'icon-dashboard',
                        order: 1,
                    },
                    children: [
                        {
                            path: 'workplace',
                            name: 'Workplace',
                            meta: {
                                locale: 'menu.server.workplace',
                                requiresAuth: true,
                            },
                        },
                        {
                            path: 'https://arco.design',
                            name: 'arcoWebsite',
                            meta: {
                                locale: 'menu.arcoWebsite',
                                requiresAuth: true,
                            },
                        },
                    ],
                },
            ];
            return successResponseWrap(menuList);
        });
    },
});
